home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / d / magicdos.d < prev    next >
Text File  |  1997-10-26  |  11KB  |  330 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *         MAGIC   Modula's  All purpose  GEM  Interface  Cadre         *
  4.  *                 ÿ         ÿ            ÿ    ÿ          ÿ             *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus in schrift-  *
  11.  * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung    *
  12.  * ber Public-Domain-H„ndler bedarf der ausdrcklichen schriftlichen   *
  13.  * Genehmigung des Autors!                                              *
  14.  *                                                                      *
  15.  * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
  16.  * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins-  *
  17.  * besondere dieser Urheberrechts-Vermerk nicht ver„ndert wird, und     *
  18.  * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor    *
  19.  * beh„lt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
  20.  * von Grnden zu widerrufen.                                           *
  21.  *----------------------------------------------------------------------*)
  22.  
  23. (*----------------------------------------------------------------------*
  24.  * MagicDOS     Disk Operating System                Modula-2 Interface *
  25.  *----------------------------------------------------------------------*)
  26.  
  27. DEFINITION MODULE MagicDOS;
  28.  
  29. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  30.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  31.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  32.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
  33.  
  34.  
  35.  
  36.  
  37.  
  38. IMPORT SYSTEM;
  39.  
  40. CONST   EOK =      0;
  41.         Error =   -1;
  42.         EDrvNR =  -2;     (* Drive not ready *)
  43.         EUnCmd =  -3;     (* Unknown command *)
  44.         ECRC =    -4;     (* CRC error *)
  45.         EBadRq =  -5;     (* Bad request *)
  46.         ESeek  =  -6;     (* Seek error *)
  47.         EMedia =  -7;     (* Unknown media *)
  48.         ESecNF =  -8;     (* Sector not found *)
  49.         EPaper =  -9;     (* No paper *)
  50.         EWritF = -10;     (* Write fault *)
  51.         EReadF = -11;     (* Read fault *)
  52.         EGenrl = -12;     (* General error *)
  53.         EWrPro = -13;     (* Write protect *)
  54.         EChng =  -14;     (* Media change *)
  55.         EUnDev = -15;     (* Unknown device *)
  56.         EBadSF = -16;     (* Bad sectors on format *)
  57.         EOther = -17;     (* Insert other disk *)
  58.         EInvFN = -32;     (* Invalid function number *)
  59.         EFilNF = -33;     (* File not found *)
  60.         EPthNF = -34;     (* Path not found *)
  61.         ENHndl = -35;     (* No handles left *)
  62.         EAccDn = -36;     (* Access denied *)
  63.         EIHndl = -37;     (* Invalid handle *)
  64.         ENSMem = -39;     (* Insufficient memory *)
  65.         EIMBA =  -40;     (* Invalid memory block address *)
  66.         EDrive = -46;     (* Invaild drive specified *)
  67.         ENMFil = -49;     (* No more files *)
  68.         ERange = -64;     (* Range error *)
  69.         EIntrn = -65;     (* Internal error *)
  70.         EPLFmt = -66;     (* Invalid program load format *)
  71.         EGSBF =  -67;     (* Setblock failure due to growth restr *)
  72.  
  73. CONST   ELOCKED = -58;    (* Record is locked *)
  74.         ENSLOCK = -59;    (* Matching Lock not found *)
  75.  
  76.  
  77. PROCEDURE Pterm0;
  78.  
  79.  
  80. TYPE tChar =    RECORD
  81.                  CASE : sCARDINAL OF
  82.                   0:  long:     lCARDINAL;|
  83.                   1:  hi:       sCARDINAL;
  84.                       lo:       sCARDINAL;|
  85.                   2:  kbshift:  CHAR;
  86.                       reserved: CHAR;
  87.                       scan:     CHAR;
  88.                       char:     CHAR;|
  89.                  END;
  90.                 END;
  91.  
  92. (* Zum einfachen "auseinandernehmen" des Longwerts, den Cconin liefert.
  93.  * Um die gltigen kbshift-Bits zu bekommen, muž das Bit 3 in der System-
  94.  * variablen conterm gesetzt sein.
  95.  *)
  96.  
  97. PROCEDURE Cconin (): lCARDINAL;
  98. (* Die meisten Bindings liefern hier ein CHAR, was einer Unterschlagung
  99.  * gleichkommt.
  100.  *)
  101.  
  102. PROCEDURE Cconout (ch: CHAR);
  103.  
  104. PROCEDURE Cauxin (): sCARDINAL;
  105. (* Liefert nach Profibuch tats„chlich ein WORD. Wozu das allerdings gut
  106.  * sein soll...
  107.  *)
  108.  
  109. PROCEDURE Cauxout (ch: CHAR);
  110.  
  111. PROCEDURE Cprnout (ch: CHAR);
  112.  
  113. CONST Input = 377C;
  114.  
  115. PROCEDURE Crawio  (ch: CHAR): lCARDINAL;
  116.  
  117. PROCEDURE Crawin  (): lCARDINAL;
  118.  
  119. PROCEDURE Cnecin  (): lCARDINAL;
  120.  
  121. PROCEDURE Cconws  (REF  string: ARRAY OF CHAR);
  122.  
  123. PROCEDURE Cconrs  (VAR string: ARRAY OF CHAR);
  124.  
  125. PROCEDURE Cconis  (): BOOLEAN;
  126.  
  127. PROCEDURE Dsetdrv (drive: sCARDINAL; VAR DriveMap: lBITSET);
  128.  
  129. PROCEDURE Cconos  (): BOOLEAN;
  130.  
  131. PROCEDURE Cprnos  (): BOOLEAN;
  132.  
  133. PROCEDURE Cauxis  (): BOOLEAN;
  134.  
  135. PROCEDURE Cauxos  (): BOOLEAN;
  136.  
  137. PROCEDURE Dgetdrv (): sCARDINAL;
  138.  
  139.  
  140. (* Achtung! LPR stockt Records immer auf gerade L„nge auf... *)
  141.  
  142.  
  143.  
  144. TYPE    PtrDTA =        POINTER TO DTA;
  145.         DTA =           RECORD
  146.                          dReserved: ARRAY [0..20] OF Byte; (* 1.02 *)
  147.                          dAttrib:   Byte;
  148.                          dTime:     sCARDINAL;
  149.                          dDate:     sCARDINAL;
  150.                          dLength:   lCARDINAL;
  151.                          dFname:    ARRAY [0..13] OF CHAR;
  152.                         END;
  153.  
  154.  
  155. PROCEDURE Fsetdta  (dtaptr: SYSTEM.ADDRESS);
  156.  
  157. PROCEDURE Super    (VAR stack: SYSTEM.ADDRESS);
  158.  
  159. PROCEDURE Tgetdate (): sCARDINAL;
  160.  
  161. PROCEDURE Tsetdate (date: sCARDINAL);
  162.  
  163. PROCEDURE Tgettime (): sCARDINAL;
  164.  
  165. PROCEDURE Tsettime (time: sCARDINAL);
  166.  
  167. PROCEDURE Fgetdta  (): SYSTEM.ADDRESS;
  168.  
  169. PROCEDURE Sversion (): sCARDINAL;
  170.  
  171. PROCEDURE Ptermres (keep: lCARDINAL; return: sCARDINAL);
  172.  
  173.  
  174. TYPE    DISKINFO =      RECORD
  175.                          bFree:   lCARDINAL;
  176.                          bTotal:  lCARDINAL;
  177.                          bSecsiz: lCARDINAL;
  178.                          bClsiz:  lCARDINAL;
  179.                         END;
  180.  
  181. PROCEDURE Dfree   (VAR dib: ARRAY OF LOC; drive: sCARDINAL);
  182.  
  183. PROCEDURE Dcreate (REF  pfad: ARRAY OF CHAR): sINTEGER;
  184.  
  185. PROCEDURE Ddelete (REF  pfad: ARRAY OF CHAR): sINTEGER;
  186.  
  187. PROCEDURE Dsetpath (REF  pfad: ARRAY OF CHAR): sINTEGER;
  188.  
  189. CONST   ReadOnly =      Bit0;
  190.         Hidden =        Bit1;
  191.         System =        Bit2;
  192.         Volume =        Bit3;
  193.         Folder =        Bit4;
  194.         Archive =       Bit5;
  195.  
  196. PROCEDURE Fcreate (REF  name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
  197. (* Ordner erzeugen NUR mit Dcreate !!! *)
  198.  
  199. CONST   NamePRN =       'PRN:';
  200.         NameAUX =       'AUX:';
  201.         NameCON =       'CON:';
  202.  
  203. CONST   CON =           -1;
  204.         AUX =           -2;
  205.         PRT =           -3;
  206.  
  207. CONST   StdIn =         0;      (* Keyboard *)
  208.         StdOut =        1;      (* Console *)
  209.         Serial =        2;      (* RS232 *)
  210.         Printer =       3;      (* Centronics *)
  211.         
  212. CONST   Read =          {};      (* Modus *)
  213.         Write =         Bit0;
  214.         ReadWrite =     Bit1;
  215.         Reserved1 =     Bit2;
  216.  
  217.         (* Folgende Modus-Flags sind nur gltig, wenn ein '_FLK'-Cookie 
  218.          * gefunden wurde. Es handelt sich dann um eine Netzf„hige
  219.          * Version von GEMDOS.
  220.          *)
  221.  
  222. CONST   Reserved2 =     Bit3;
  223.         ShareFlag1 =    Bit4;
  224.         ShareFlag2 =    Bit5;
  225.         ShareFlag3 =    Bit6;
  226.         Inheritance =   Bit7;
  227.         
  228.  
  229. PROCEDURE Fopen  (REF  name: ARRAY OF CHAR; mode: sBITSET): sINTEGER;
  230.  
  231. PROCEDURE Fclose (handle: sINTEGER): sINTEGER;
  232.  
  233. PROCEDURE Fread  (handle: sINTEGER; VAR count: lCARDINAL; buffer: SYSTEM.ADDRESS);
  234.  
  235. PROCEDURE Fwrite (handle: sINTEGER; VAR count: lCARDINAL; buffer: SYSTEM.ADDRESS);
  236.  
  237. PROCEDURE Fdelete (REF  name: ARRAY OF CHAR): BOOLEAN;
  238.  
  239. CONST   SeekStart =     0;      (* Seekmodus *)
  240.         SeekPos =       1;
  241.         SeekEnd =       2;
  242.  
  243. PROCEDURE Fseek (offset: lINTEGER; handle, mode: sINTEGER): lCARDINAL;
  244.  
  245. PROCEDURE Fattrib (REF  name: ARRAY OF CHAR; set: BOOLEAN; VAR attr: sBITSET);
  246.         
  247. PROCEDURE Fdup (handle: sINTEGER): sINTEGER;
  248.  
  249. PROCEDURE Fforce (std, nonstd: sINTEGER): BOOLEAN;
  250.  
  251. PROCEDURE Dgetpath (VAR pfad: ARRAY OF CHAR; drive: sCARDINAL);
  252.  
  253. CONST Minus1 =  0FFFFFFFFH;
  254.  
  255. PROCEDURE Malloc  (bytes: lCARDINAL): SYSTEM.ADDRESS;
  256.  
  257. PROCEDURE Mfree (addr: SYSTEM.ADDRESS): BOOLEAN;
  258.  
  259. PROCEDURE Mshrink (addr: SYSTEM.ADDRESS; newSize: lCARDINAL): BOOLEAN;
  260.  
  261. CONST   LoadnGo =       0;
  262.         Load =          3;
  263.         Run =           4;
  264.         NewPD =         5;
  265.  
  266. PROCEDURE Pexec (mode: sCARDINAL; VAR name, tail, env: ARRAY OF CHAR): sINTEGER;
  267.  
  268. PROCEDURE Pterm (code: sINTEGER);
  269.  
  270. PROCEDURE Fsfirst (REF  name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
  271.  
  272. PROCEDURE Fsnext (): sINTEGER;
  273.  
  274. PROCEDURE Frename (REF  curr, new: ARRAY OF CHAR): sINTEGER;
  275.  
  276. TYPE    DOSTIME =       RECORD
  277.                          time: sCARDINAL;
  278.                          date: sCARDINAL;
  279.                         END;
  280.  
  281. PROCEDURE Fdatime (handle: sINTEGER; VAR dostime: ARRAY OF LOC; set: BOOLEAN);
  282.  
  283.  
  284. (*====================================================================*)
  285. (*      Folgende Funktionen sind erst auf TT-Rechnern verfgbar!      *)
  286. (*====================================================================*)
  287.  
  288. CONST   STRAM =         0;
  289.         FASTRAM =       1;
  290.         STRAMpref =     2;
  291.         FASTRAMpref =   3;
  292.  
  293. PROCEDURE Mxalloc (bytes: lCARDINAL; mode: sINTEGER): SYSTEM.ADDRESS;
  294. (* Wie Malloc, jedoch mit Mode-Flag:
  295.  *
  296.  *  STRAM =     mode 0  nur ST-RAM benutzen
  297.  *  FASTRAM =        1  nur FAST-RAM benutzen
  298.  *  STRAMpref =      2  ST-RAM vorzugweise
  299.  *  FASTRAMpref =    3  FAST-RAM vorzugsweise
  300.  *)
  301.  
  302. PROCEDURE Maddalt (start: SYSTEM.ADDRESS; size: lCARDINAL): sINTEGER;
  303. (* stellt dem GEMDOS-MemoryManager weiteren Speicher zur Verfuegung (z.B.
  304.  * aus VME-RAM), der fuer Malloc's und Pexec's verwendet werden kann. GEMDOS
  305.  * uebernimmt damit vollstaendig die Kontrolle ueber diesen Speicherbereich,
  306.  * d.h. er darf nicht mehr anderweitig verwendet werden. Bei Allozierungen
  307.  * etc. ist er analog zum FastRAM.
  308.  * Zurueckgegeben wird 0 oder ein Fehlercode.
  309.  *)
  310.  
  311. (*========================================================================*
  312.  * Folgende Funktionen sind NUR DANN verfgbar, wenn der '_FLK' Cookie    *
  313.  * vorhanden ist. Das ist nur der Fall wenn ein Netzwerk installiert ist! *
  314.  *========================================================================*)
  315.  
  316. CONST   CreateLock =    0;
  317.         RemoveLock =    1;        
  318.  
  319. PROCEDURE Flock (handle, mode: sINTEGER; start, length: lCARDINAL);
  320. (* Realisiert Filelocking.
  321.  *
  322.  * handle =     Handle des GEMDOS-Files
  323.  * mode =       CreateLock = Locking ein, RemoveLock = Locking aus
  324.  * start =      Offset vom Beginn der Datei, bei dem das Locking beginnen soll
  325.  * length =     L„nge in Bytes des gelockten Dateiabschnittes
  326.  *)
  327.  
  328. END MagicDOS.
  329.  
  330.